quartz: make moving CSD windows right up to the screen's menu bar work.
authorChristoph Reiter <reiter.christoph@gmail.com>
Mon, 20 Jul 2015 06:32:05 +0000 (08:32 +0200)
committerChristoph Reiter <creiter@src.gnome.org>
Thu, 23 Jul 2015 11:18:49 +0000 (13:18 +0200)
The default implementation prevents the window + shadow to move above
the menu bar. Change it so only the window is considered.

gdk/quartz/GdkQuartzNSWindow.c

index 43348ef0f76b98a1cf3cddb09b658b338aa64ef1..8795d3d762d359b1e86d1fd256f703b055f1e6bf 100644 (file)
@@ -673,4 +673,20 @@ update_context_from_dragging_info (id <NSDraggingInfo> sender)
 
 #endif
 
+- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen
+{
+  NSRect rect;
+  GdkWindow *window = [[self contentView] gdkWindow];
+  GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
+
+  /* Allow the window to move up "shadow_top" more than normally allowed
+   * by the default impl. This makes it possible to move windows with
+   * client side shadow right up to the screen's menu bar. */
+  rect = [super constrainFrameRect:frameRect toScreen:screen];
+  if (frameRect.origin.y > rect.origin.y)
+    rect.origin.y = MIN (frameRect.origin.y, rect.origin.y + impl->shadow_top);
+
+  return rect;
+}
+
 @end